package com.jieao.template.service;

import com.github.pagehelper.PageInfo;
import com.jieao.template.entity.accountMgr.AccountDO;
import com.jieao.template.entity.accountMgr.AdminMenuVO;
import com.jieao.template.entity.accountMgr.AssociatedRoleDTO;
import com.jieao.template.entity.accountMgr.PasswordDTO;
import com.jieao.template.entity.pub.JsonData;
import com.jieao.template.entity.pub.Pagination;
import com.jieao.template.entity.roleMgr.AssignmentPermissionDTO;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * 账户表(Account)表服务接口
 *
 * @author jzw
 * @since 2020-04-11 14:44:53
 */
public interface AccountService
{
    /**
     * 修改当前登录人密码
     *
     * @param passwordDTO
     * @return com.northeastern.university.common.model.JsonData
     * @author Jzw
     * @date 2019/12/12 10:11
     */
    JsonData setPassword(PasswordDTO passwordDTO);

    /**
     * 获取验证码
     *
     * @param
     * @return void
     * @author Jzw
     * @date 2019/12/12 10:27
     */
    void getVerification(HttpServletResponse response) throws IOException;

    /**
     * 给用户分配权限
     *
     * @param assignmentPermissionDTO
     * @return void
     * @author Jzw
     * @date 2019/12/17 15:18
     */
    void assignmentPermission(AssignmentPermissionDTO assignmentPermissionDTO);

    /**
     * 获取当前用户已选的权限
     *
     * @param id accountId
     * @return java.util.List<java.lang.String>
     * @author Jzw
     * @date 2019/12/17 14:54
     */
    List<String> listCheckedPermission(String id);

    /**
     * 用户关联角色
     *
     * @param params
     * @return com.northeastern.university.common.model.JsonData
     * @author Jzw
     * @date 2019/12/19 15:41
     */
    void associatedRole(AssociatedRoleDTO params);

    /**
     * 获取 用户昵称 和 头像
     *
     * @param
     * @return java.util.Map<java.lang.String, java.lang.String>
     * @author Jzw
     * @date 2019/12/19 10:36
     */
    String getUserName();

    /**
     * 启禁用账户
     *
     * @param accountId 账户id
     * @return java.lang.Object
     * @author Jzw
     * @date 2019/12/13 13:49
     */
    void disOrEnaAccount(String accountId);

    /**
     * 获取当前登录人菜单
     *
     * @param
     * @return java.lang.Object
     * @author Jzw
     * @date 2019/12/19 16:24
     */
    List<AdminMenuVO> getMenuList();

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    AccountDO queryById(String id);

    /**
     * 通过用户名查询单条数据
     *
     * @param name 用户名
     * @return 实例对象
     */
    AccountDO queryByName(String name);

    /**
     * 查询分页数据
     *
     * @param pagination 分页信息
     * @return PageInfo对象
     */
    PageInfo<AccountDO> queryAllByLimit(Pagination pagination);

    /**
     * 查询全部数据
     *
     * @param account 筛选对象
     * @return 列表数据
     */
    List<AccountDO> queryAll(AccountDO account);

    /**
     * 新增数据
     *
     * @param account 实例对象
     * @return 实例对象
     */
    AccountDO insert(AccountDO account);

    /**
     * 修改数据
     *
     * @param account 实例对象
     * @return 实例对象
     */
    int update(AccountDO account);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(String id);

    /**
     * 通过主键集合批量删除数据
     *
     * @param idList 主键集合
     */
    void batchDeletionByIdList(List<String> idList);
}